home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Libraries / SAT 2.3b4 / Demo ƒ / SAT Invaders demo ƒ / sEnemy.p < prev    next >
Text File  |  1995-05-01  |  2KB  |  90 lines

  1. {===============================================}
  2. {================= Enemy sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sEnemy;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. { Enemy object for the SATInvaders sample game. }
  18.  
  19. interface
  20.  
  21.     uses
  22.         SAT, SoundConst, GameGlobals, sMissile;
  23.  
  24.     var
  25.         globalspeed: Point;
  26.         turnFlag: boolean;
  27.         lasth, downcount: integer;
  28.  
  29.     procedure InitEnemy;
  30.     procedure SetupEnemy (sp: SpritePtr);
  31.     procedure HandleEnemy (me: SpritePtr);
  32.  
  33. implementation
  34.  
  35.     var
  36.         enemyFace: array[1..6] of FacePtr;
  37.  
  38.     procedure InitEnemy;
  39.         var
  40.             ii: integer;
  41.     begin
  42.         for ii := 1 to 6 do
  43.             enemyFace[ii] := SATGetFace(127 + ii);
  44.     end;
  45.  
  46.     procedure SetupEnemy (sp: SpritePtr);
  47.     begin
  48.         sp^.face := enemyFace[1];
  49.         sp^.mode := SATRand(6) + 1; { icon number }
  50.         SetRect(sp^.hotRect, 2, 4, 30, 32);
  51. { Since enemies are only created at the beginning of each level, we re-initialize this stuff here:}
  52.         turnFlag := true; {start by going downwards}
  53.         globalspeed.h := 0;
  54.         globalspeed.v := 3;
  55.         lasth := -5;
  56.         downcount := (((level div 2) + 1) * 40) div 3; {How far down should we go when we come in?}
  57.         sp^.task := @HandleEnemy;
  58.     end;
  59.  
  60.     procedure HandleEnemy (me: SpritePtr);
  61.         var
  62.             missile: Spriteptr;
  63.     begin
  64.         if me^.kind <> -3 then
  65.             begin
  66.                 me^.task := nil;
  67.                 SATSoundPlay(dunkH, 1, false);
  68.             end;
  69.  
  70.         me^.mode := me^.mode + 1;
  71.         if me^.mode = 7 then
  72.             me^.mode := 1;
  73.         me^.face := enemyFace[me^.mode];
  74.  
  75.         me^.position.h := me^.position.h + globalspeed.h;
  76.         me^.position.v := me^.position.v + globalspeed.v;
  77.  
  78.         if (me^.position.h < 0) or (me^.position.h > gSAT.offSizeH - 32) then
  79.             turnflag := true;
  80.         if me^.position.v > gSAT.offSizeV then
  81.             me^.task := nil;
  82.  
  83.         if SATRand100 < 2 then
  84.             begin
  85.                 missile := SATNewSprite(-1, me^.position.h + 8, me^.position.v + 20, @SetupMissile);
  86.                 SATSoundPlay(piuH, 1, false);
  87.             end;
  88.     end;
  89.  
  90. end.